##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
##
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
## Warning: package 'sf' was built under R version 4.4.2
## Linking to GEOS 3.12.2, GDAL 3.9.3, PROJ 9.4.1; sf_use_s2() is TRUE
## Cargando paquete requerido: stringr
## Cargando paquete requerido: reshape2
## Cargando paquete requerido: RJSONIO
## Cargando paquete requerido: plyr
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## Adjuntando el paquete: 'plyr'
## The following objects are masked from 'package:plotly':
##
## arrange, mutate, rename, summarise
## The following objects are masked from 'package:dplyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
##
## Adjuntando el paquete: 'httr'
## The following object is masked from 'package:plotly':
##
## config
## āā Attaching core tidyverse packages āāāāāāāāāāāāāāāāāāāāāāāā tidyverse 2.0.0 āā
## ā forcats 1.0.0 ā tibble 3.2.1
## ā lubridate 1.9.3 ā tidyr 1.3.1
## ā purrr 1.0.2
## āā Conflicts āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā tidyverse_conflicts() āā
## ā plyr::arrange() masks plotly::arrange(), dplyr::arrange()
## ā purrr::compact() masks plyr::compact()
## ā httr::config() masks plotly::config()
## ā plyr::count() masks dplyr::count()
## ā plyr::desc() masks dplyr::desc()
## ā plyr::failwith() masks dplyr::failwith()
## ā plotly::filter() masks dplyr::filter(), stats::filter()
## ā plyr::id() masks dplyr::id()
## ā dplyr::lag() masks stats::lag()
## ā plyr::mutate() masks plotly::mutate(), dplyr::mutate()
## ā plyr::rename() masks plotly::rename(), dplyr::rename()
## ā plyr::summarise() masks plotly::summarise(), dplyr::summarise()
## ā plyr::summarize() masks dplyr::summarize()
## ā¹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
##
## Adjuntando el paquete: 'jsonlite'
##
## The following object is masked from 'package:purrr':
##
## flatten
##
## The following objects are masked from 'package:RJSONIO':
##
## fromJSON, toJSON
##
## Adjuntando el paquete: 'rjson'
##
## The following objects are masked from 'package:jsonlite':
##
## fromJSON, toJSON
##
## The following objects are masked from 'package:RJSONIO':
##
## fromJSON, toJSON
##
## Adjuntando el paquete: 'rlang'
##
## The following objects are masked from 'package:jsonlite':
##
## flatten, unbox
##
## The following objects are masked from 'package:purrr':
##
## %@%, flatten, flatten_chr, flatten_dbl, flatten_int, flatten_lgl,
## flatten_raw, invoke, splice
Cargar environment
Determinar el consumo de antibióticos por comunidades autónomas, diferenciando entre recetado y no recetado, para identificar tendencias de uso.
tipo_ccaa_consumo_o_no <- read_delim("INPUT/DATA/datos_ccaa/tipo_ccaa_consumo_o_no.csv",
delim = ";", escape_double = FALSE, trim_ws = TRUE)## Rows: 3420 Columns: 6
## āā Column specification āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
## Delimiter: ";"
## chr (6): Sexo, Total Nacional, Comunidades y Ciudades Autónomas, Tipo de med...
##
## ā¹ Use `spec()` to retrieve the full column specification for this data.
## ā¹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
antibioticos <- tipo_ccaa_consumo_o_no %>%
dplyr::filter(`Tipo de medicamento` == "Antibióticos",`Sexo` == "Ambos sexos")%>%
dplyr::filter(`SĆ o no` == "SĆ")
# Esta tabla enseña que el 3,54% de la población española en la última encuesta reconoce
# haber consumido antibióticos en las últimas 2 semanas (En el año 2021)
antibioticos$Total <- gsub(",", ".", antibioticos$Total)
# Limpia espacios y caracteres no numƩricos (si es necesario)
antibioticos$Total <- gsub(" ", "", antibioticos$Total)
# Convierte a numƩrico
antibioticos$Total <- as.numeric(antibioticos$Total)
# Revisa si hay NA después de la conversión
sum(is.na(antibioticos$Total)) # Muestra el nĆŗmero de NAs## [1] 0
consumo <- antibioticos %>%
group_by(`Comunidades y Ciudades Autónomas`) %>%
arrange(desc(Total))
consumo## # A tibble: 20 Ć 6
## # Groups: Comunidades y Ciudades Autónomas [20]
## Sexo `Total Nacional` Comunidades y Ciudadā¦Ā¹ `Tipo de medicamento` `SĆ o no`
## <chr> <chr> <chr> <chr> <chr>
## 1 Ambo⦠Total Madrid (Comunidad de) Antibióticos SĆ
## 2 Ambo⦠Total Rioja (La) Antibióticos SĆ
## 3 Ambo⦠Total Castilla y León Antibióticos SĆ
## 4 Ambo⦠Total Comunitat Valenciana Antibióticos SĆ
## 5 Ambo⦠Total PaĆs Vasco Antibióticos SĆ
## 6 Ambo⦠Total Canarias Antibióticos SĆ
## 7 Ambo⦠Total <NA> Antibióticos SĆ
## 8 Ambo⦠Total Galicia Antibióticos SĆ
## 9 Ambo⦠Total Navarra (Comunidad Fo⦠Antibióticos SĆ
## 10 Ambo⦠Total AndalucĆa Antibióticos SĆ
## 11 Ambo⦠Total CataluƱa Antibióticos SĆ
## 12 Ambo⦠Total Aragón Antibióticos SĆ
## 13 Ambo⦠Total Castilla-La Mancha Antibióticos SĆ
## 14 Ambo⦠Total Cantabria Antibióticos SĆ
## 15 Ambo⦠Total Murcia (Región de) Antibióticos SĆ
## 16 Ambo⦠Total Extremadura Antibióticos SĆ
## 17 Ambo⦠Total Asturias (Principado ⦠Antibióticos SĆ
## 18 Ambo⦠Total Melilla (Ciudad Autón⦠Antibióticos SĆ
## 19 Ambo⦠Total Ceuta (Ciudad Autónom⦠Antibióticos SĆ
## 20 Ambo⦠Total Balears (Illes) Antibióticos SĆ
## # ā¹ abbreviated name: ¹ā`Comunidades y Ciudades Autónomas`
## # ā¹ 1 more variable: Total <dbl>
c_c_final <- consumo %>%
mutate(`Comunidades y Ciudades Autónomas` = ifelse(is.na(`Comunidades y Ciudades Autónomas`), "Total PaĆs", `Comunidades y Ciudades Autónomas`))%>%
dplyr::rename(comunidades_autonomas = `Comunidades y Ciudades Autónomas`)%>%
select(comunidades_autonomas, Total)%>%
dplyr::rename(total_consumo_ccaa = Total)
c_c_final## # A tibble: 20 Ć 2
## # Groups: comunidades_autonomas [20]
## comunidades_autonomas total_consumo_ccaa
## <chr> <dbl>
## 1 Madrid (Comunidad de) 5.51
## 2 Rioja (La) 4.88
## 3 Castilla y León 4.7
## 4 Comunitat Valenciana 3.91
## 5 PaĆs Vasco 3.88
## 6 Canarias 3.86
## 7 Total PaĆs 3.54
## 8 Galicia 3.43
## 9 Navarra (Comunidad Foral de) 3.43
## 10 AndalucĆa 3.11
## 11 CataluƱa 3.1
## 12 Aragón 2.91
## 13 Castilla-La Mancha 2.69
## 14 Cantabria 2.4
## 15 Murcia (Región de) 2.39
## 16 Extremadura 2.33
## 17 Asturias (Principado de) 1.82
## 18 Melilla (Ciudad Autónoma de) 0.66
## 19 Ceuta (Ciudad Autónoma de) 0.64
## 20 Balears (Illes) 0.42
Con estos datos podemos observar de manera grĆ”fica la tendencia de consumo de antibióticos por comunidad autónoma en este paĆs.
# Crear el grƔfico de barras
ggplot(c_c_final, aes(x = reorder(comunidades_autonomas, -total_consumo_ccaa), y = total_consumo_ccaa)) +
geom_bar(stat = "identity", fill = "steelblue") +
labs(x = "Comunidades Autónomas", y = "Total Consumo", title = "Consumo de antibióticos por Comunidad Autónoma") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) A continuación estudiaremos si esa cantidad de antibiótico se ha consumido de forma regulada, o por el contrario, no estÔ recetado, favoreciendo asà el autoconsumo de los mismos, lo cual se estÔ considerando como una de las posibles causas de la resistencia a los antibióticos
# Leer el archivo .px
archivo_px <- read.px("INPUT/DATA/datos_ccaa/tipo_ccaa_recetado_o_no.px")
df_px <- as.data.frame(archivo_px)
# quedarme solo con los antibióticos
antibiotic <- df_px[df_px[["Tipo.de.medicamento"]] == "Antibióticos" & df_px$`Sexo` == "Ambos sexos", ]
# qué comunidad autónoma se automedica mÔs
consumo_comunidades <- antibiotic%>%
dplyr::filter(`Recetado` == "No recetado") %>%
dplyr::filter(value != 0)%>%
group_by(`Comunidad.autónoma`) %>%
arrange(desc(value)) %>%
select(Comunidad.autónoma, value)%>%
dplyr::rename(comunidades_autonomas = Comunidad.autónoma)%>%
dplyr::rename("Automedicación (%)" = value)%>%
dplyr::mutate(comunidades_autonomas = case_when(
comunidades_autonomas == "Total" ~ "Total PaĆs",
TRUE ~ comunidades_autonomas
))unir_consumo_autoconsumo <- inner_join(c_c_final, consumo_comunidades, by = "comunidades_autonomas")%>%
mutate("Automedicación (%)" = total_consumo_ccaa * `Automedicación (%)`/100)%>%
dplyr::rename("Consumo total" = total_consumo_ccaa)%>%
pivot_longer(.,names_to = "Variable", values_to = "Valores", cols = c("Consumo total":"Automedicación (%)")) %>%
mutate(Variable = factor(Variable, levels = c("Consumo total","Automedicación (%)")))
ggplot(unir_consumo_autoconsumo, aes(fill = Variable, y = Valores, x = reorder(comunidades_autonomas, -Valores))) +
geom_bar(position = "stack", stat = "identity") +
scale_fill_manual(values = c("Consumo total" = "lightgreen",
"Automedicación (%)" = "tomato")) +
labs(x = "Comunidades Autónomas", y = "Porcentaje de Consumo", title = "Automedicación según el consumo de antibióticos por CCAA ")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))A continuación se presenta una función realizada para facilitar nuestro trabajo, ya que tenemos muchos datos de paĆses y las fuentes no siempre estĆ”n organizadas de forma que sea compatible la combinación de unos conjuntos de datos con otros. Muchas columnas ofrecen la misma información (los nombres de los paĆses) pero expresada en formatos diferentes, algunas dan el nombre del paĆs y otras el código internacional que las identifica.
library(dplyr)
library(rlang)
cambio_nombre_codigo <- function(Tabla, columna) {
# Convertir el nombre de la columna en un sĆmbolo
columna_sym <- ensym(columna)
Tabla %>%
mutate(
!!columna_sym := case_when(
!!columna_sym == "Slovakia" ~ "SK",
!!columna_sym == "Belgium" ~ "BE",
!!columna_sym == "Cyprus" ~ "CY",
!!columna_sym == "Greece" ~ "EL",
!!columna_sym == "Romania" ~ "RO",
!!columna_sym == "Bulgaria" ~ "BG",
!!columna_sym == "France" ~ "FR",
!!columna_sym == "Malta" ~ "MT",
!!columna_sym == "Poland" ~ "PL",
!!columna_sym == "Spain" ~ "ES",
!!columna_sym == "Ireland" ~ "IE",
!!columna_sym == "Italy" ~ "IT",
!!columna_sym == "Luxembourg" ~ "LU",
!!columna_sym == "Portugal" ~ "PT",
!!columna_sym == "Czech Republic" ~ "CZ",
!!columna_sym == "Czechia" ~ "CZ",
!!columna_sym == "Finland" ~ "FI",
!!columna_sym == "Austria" ~ "AT",
!!columna_sym == "Germany" ~ "DE",
!!columna_sym == "Denmark" ~ "DK",
!!columna_sym == "Estonia" ~ "EE",
!!columna_sym == "Hungary" ~ "HU",
!!columna_sym == "Croatia" ~ "HR",
!!columna_sym == "Lithuania" ~ "LT",
!!columna_sym == "Latvia" ~ "LV",
!!columna_sym == "Netherlands" ~ "NL",
!!columna_sym == "Sweden" ~ "SE",
!!columna_sym == "Slovenia" ~ "SI",
TRUE ~ as.character(!!columna_sym) # Mantener valores originales si no coinciden
)
)
}
cambio_codigo_nombre <- function(Tabla, columna) {
# Convertir el nombre de la columna en un sĆmbolo
columna_sym <- ensym(columna)
Tabla %>%
mutate(
!!columna_sym := case_when(
!!columna_sym == "SK" ~ "Slovakia",
!!columna_sym == "BE" ~ "Belgium",
!!columna_sym == "CY" ~ "Cyprus",
!!columna_sym == "EL" ~ "Greece",
!!columna_sym == "RO" ~ "Romania",
!!columna_sym == "BG" ~ "Bulgaria",
!!columna_sym == "FR" ~ "France",
!!columna_sym == "MT" ~ "Malta",
!!columna_sym == "PL" ~ "Poland",
!!columna_sym == "ES" ~ "Spain",
!!columna_sym == "IE" ~ "Ireland",
!!columna_sym == "IT" ~ "Italy",
!!columna_sym == "LU" ~ "Luxembourg",
!!columna_sym == "PT" ~ "Portugal",
!!columna_sym == "CZ" ~ "Czech Republic",
!!columna_sym == "FI" ~ "Finland",
!!columna_sym == "AT" ~ "Austria",
!!columna_sym == "DE" ~ "Germany",
!!columna_sym == "DK" ~ "Denmark",
!!columna_sym == "EE" ~ "Estonia",
!!columna_sym == "HU" ~ "Hungary",
!!columna_sym == "HR" ~ "Croatia",
!!columna_sym == "LT" ~ "Lithuania",
!!columna_sym == "LV" ~ "Latvia",
!!columna_sym == "NL" ~ "Netherlands",
!!columna_sym == "SE" ~ "Sweden",
!!columna_sym == "SI" ~ "Slovenia",
TRUE ~ as.character(!!columna_sym) # Mantener valores originales si no coinciden
)
)
}Analizar si existe una relación significativa entre el Producto Interno Bruto de los paĆses de la Unión Europea y los niveles de resistencia a antibióticos.
## Warning: Missing column names filled in: 'X14' [14]
##
## āā Column specification āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
## cols(
## `freq,na_item,ppp_cat,geo\TIME_PERIOD` = col_character(),
## `2012` = col_double(),
## `2013` = col_double(),
## `2014` = col_double(),
## `2015` = col_double(),
## `2016` = col_double(),
## `2017` = col_double(),
## `2018` = col_double(),
## `2019` = col_double(),
## `2020` = col_double(),
## `2021` = col_double(),
## `2022` = col_double(),
## `2023` = col_double(),
## X14 = col_logical()
## )
# Cambio de nombre columna
colnames(pib)[1] <- "pais"
# Nos quedamos con las Ćŗltimas letras
pib$pais <- substr(pib$pais, nchar(pib$pais) - 1, nchar(pib$pais))
lista_pais <- list("BE", "BG", "CZ", "DK", "DE", "EE", "IE", "EL", "ES", "FR", "HR", "IT", "CY", "LV", "LT", "LU", "HU", "MT", "NL",
"AT", "PL", "PT", "RO", "SI", "SK", "FI", "SE")
# nos quedamos solo con los paĆses de la UE
# Filtrar los datos, quitar columnas nulas y seleccionar las columnas necesarias en una tuberĆa
pib_2022_desc <- pib %>%
dplyr::filter(pais %in% unlist(lista_pais)) %>% # Filtrar por los paĆses en 'lista_pais'
dplyr::select(where(~ all(!is.na(.)))) %>% # Eliminar columnas con todos los valores nulos
dplyr::select(pais, `2022`) %>% # Seleccionar las columnas 'pais' y '2022'
arrange(desc(`2022`)) # Ordenar por el PIB del 2022 en orden descendenteTras el tratamiento de estos datos se puede ver de manera grĆ”fica la comparativa entre los paĆses.
grafico_pib <- ggplot(pib_2022_desc, aes(x = reorder(pais, -`2022`), y = `2022`)) +
geom_bar(stat = "identity", fill = "gold") +
labs(x = "PaĆs", y = "Valor en 2022", title = "PIB por PaĆs en 2022") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor legibilidad
grafico_pibUna vez observada la primera variable, generamos los datos del valor medio de la resistencia a antimicrobianos en los paĆses europeos para comprobar si existe una relación o, efectivamente no tiene que ver.
Incidencia_enfermedades <- read_csv("INPUT/DATA/ECDC_encuesta_AMR_incidencia_enfermedades.csv")
incidencia_2022MF <- Incidencia_enfermedades %>%
filter(Time == 2022) %>%
filter(Category == 'Male' | Category == 'Female')
incidencia_2022MF$Value <- as.numeric(incidencia_2022MF$Value)
media_poblacion <- incidencia_2022MF %>%
select(-Unit, -HealthTopic, -Time, -Distribution) %>%
mutate(grupo = substr(Population, 1, 3))
lista_codigos_paises <- list("AT", "BE", "BG", "CY", "CZ", "DE", "DK", "EE", "EL", "ES", "FI", "FR", "HR", "HU",
"IE", "IT", "LT", "LU", "LV", "MT", "NL", "PL", "PT", "RO", "SE", "SI", "SK")
# Calcular la media de 'Value' por 'RegionCode' y 'grupo'
otra <- media_poblacion %>%
select(-Category, -CategoryIndex, -Population) %>%
arrange(RegionCode, grupo) %>% # Ordena los datos
group_by(RegionCode, grupo) %>% # Agrupa por RegionCode y grupo
summarise(mean_value = mean(Value, na.rm = TRUE))%>%
filter(RegionCode %in% lista_codigos_paises) # Calcula la media en cada grupo y desagrupa
otra <- media_poblacion %>%
select(-Category, -CategoryIndex, -Population) %>%
arrange(RegionCode, grupo) %>%
group_by(RegionCode, grupo) %>%
summarise(mean_value = mean(Value, na.rm = TRUE))
otra$mean_value[is.nan(otra$mean_value)] <- 0
media_region <- otra %>%
group_by(RegionCode) %>%
summarise(mean_value_region = mean(mean_value, na.rm = TRUE))
boxplot <- ggplot(otra, aes(x = grupo, y = mean_value)) +
geom_boxplot() +
labs(title = "Distribution of Mean Incidence by Bacteria Group",
x = "Bacteria Group", y = "Mean Incidence") +
theme_minimal()
incidencia_keyed <- highlight_key(otra, ~RegionCode)
scatter_plot <- ggplot(incidencia_keyed, aes(x = grupo, y = mean_value, color = RegionCode, text = paste("PaĆs:", RegionCode))) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Population vs Mean Incidence Value by Region",
x = "Population", y = "Mean Incidence Value") +
theme_classic()
interactive_scatter_plot <- ggplotly(scatter_plot, tooltip = "text") %>%
highlight(on = "plotly_click", off = "plotly_doubleclick", color = "red", opacityDim = 0.2)
interactive_scatter_plotEste código cargado en el entorno, es capaz de generar grĆ”ficos que permitan ver la incidencia de las distintas bacterias por cada paĆs y para ver cuĆ”l es la bacteria que mĆ”s afecta en toda la Unión Europea.
boxplot_in <- ggplot(otra, aes(x = grupo, y = mean_value)) +
geom_boxplot() +
labs(title = "Distribution of Mean Incidence by Bacteria Group",
x = "Bacteria Group", y = "Mean Incidence") +
theme_minimal()
boxplot_inincidencia_keyed <- highlight_key(otra, ~RegionCode)
scatter_plot <- ggplot(incidencia_keyed, aes(x = grupo, y = mean_value, color = RegionCode, text = paste("PaĆs:", RegionCode))) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Population vs Mean Incidence Value by Region",
x = "Population", y = "Mean Incidence Value") +
theme_classic()
interactive_scatter_plot <- ggplotly(scatter_plot, tooltip = "text") %>%
highlight(on = "plotly_click", off = "plotly_doubleclick", color = "red", opacityDim = 0.2)## `geom_smooth()` using formula = 'y ~ x'
Explorar cómo el consumo de antibióticos en sectores como el personal (comunitario), hospitalario y ganadero se relaciona con los niveles de resistencia a antibióticos en diferentes paĆses de la UE.
Uno de los factores a estudiar era el consumo/administración de este tipo de los medicamentos por parte de los hospitales y la ciudadanĆa de manera individual, y eso se ve reflejado en los siguientes datos extraĆdos de la encuesta europea anual.
library(tidyverse)
library(rjson)
library(dplyr)
library(tidyr)
library(ggplot2)
DDD_Europa_Json <- fromJSON(file = "INPUT/DATA/DDD_1000_habitantes_paises.JSON")
DDD_Europa_df <- do.call(rbind, lapply(DDD_Europa_Json, function(x) {
data.frame(Country = x$Country,
DDD_per_1000_inhabitants_per_day = as.numeric(x$`DDD per 1000 inhabitants per day`))
}))
# lapply: Aplica una función a cada elemento de una lista y devuelve una lista con los resultados
# function(x): Define una función anónima que serÔ aplicada a cada elemento x de la lista DDD_Europa_Json.
# x$Country: Extrae el campo Country del elemento x.
# x$'DDD per 1000 inhabitants per day': Extrae el campo DDD per 1000 inhabitants per day de x y lo convierte en numƩrico con as.numeric.
# data.frame(...): Crea un dataframe con dos columnas
# Usar la función 'cambio_nombre_codigo' para convertir nombres de paĆses en códigos
DDD_Europa_df <- cambio_nombre_codigo(DDD_Europa_df, "Country")
# AƱadir columna para calcular DDD por cada 100 habitantes y eliminar la columna original
DDD_Europa_df <- DDD_Europa_df %>%
dplyr::mutate(DDD_per_100_inhabitants_per_day = DDD_per_1000_inhabitants_per_day / 10) %>%
select(-DDD_per_1000_inhabitants_per_day)Al tratarse del número de dosis estÔndar consumidas diariamente por cada 1000 personas, se divide entre 10 para que se convierta en el número de dosis diarias por cada 100 habitantes.
Si se considera que cada dosis se consume por una persona diferente, el resultado de la segunda columna significa que el x% de la población de cada paĆs consume antibiótico de forma diaria en el sector hospitalario y comunitario.
GrĆ”fico de barras de la Dosis de antibióticos media Diaria Definida de los paĆses ordenados de mayor a menor consumo
grafico_DDD <- ggplot(DDD_Europa_df, aes(x = reorder(Country, -DDD_per_100_inhabitants_per_day),
y = DDD_per_100_inhabitants_per_day)) +
geom_bar(stat = "identity", fill = "turquoise") +
labs(title = "DDD por 100 habitantes por dĆa en Europa",
x = "PaĆs",
y = "DDD por 100 habitantes por dĆa") +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
grafico_DDDSe puede analizar de forma individual, para determinar quĆ© paĆs consume mĆ”s antibióticos de forma registrada por el sistema de salud, o por el contrario, se puede comparar con otros factores que se estĆ”n estudiando como posibles causantes de la resistencia a los antibióticos para encontrar relaciones con el porcentaje de la población de los diferentes paĆses de la UE que han dado positivo en resistencia a los antimicrobianos.
A continuación se pretende estudiar el consumo de antibióticos por parte de los animales de granja suministrados por los profesionales del sector, que en ocasiones resultan en sobremedicación. Este problema se suele dar como resultado de un tratamiento (no necesario) cuyo objetivo es tener animales sanos y sin ninguna enfermedad para poder venderlos y que el producto cÔrnico no se desperdicie sin perder dinero.
Para abrir los datos relativos a la ganaderĆa, se presenta una función que permite abrir una carpeta con numerosos archivos de extensión .json con la misma estructura y leerlos.
library(httr)
library(tidyverse)
library(jsonlite)
library(readxl)
library(rjson)
obtener_nombre<-function(carpeta){
archivos <- as.list(list.files(path =carpeta))
lista_nombres<-list()
for(i in 1:length(archivos)){
posicion1<-regexpr("_", archivos[[i]])
posicion2<-regexpr("\\.", archivos[[i]])
subcadena<-substr(archivos[[i]], posicion1+1, posicion2-1)
lista_nombres[[i]]<-subcadena
}
return(lista_nombres)
}
obtener_archivo<-function(direccion){
lista_paises<-obtener_nombre(direccion)
lista_enlace<-list()
direccion_archivos<-list()
for(i in lista_paises){
cada_pais<-paste0("AMR_",i,".json")
lista_enlace[i]<-cada_pais
}
for(i in lista_enlace){
cada_archivo<-paste0(direccion,"/",i)
direccion_archivos[i]<-cada_archivo
}
for(i in direccion_archivos){
pais<-fromJSON(file= i)
enlace<-pais$links$archive
respuesta_archivo <- GET(enlace)# Hacer la solicitud HTTP para descargar el archivo
nombre_archivo<-basename(enlace)#Extrae el nombre del archivo de la URL
if (status_code(respuesta_archivo) == 200) {# Verificar si la solicitud fue exitosa (código 200, código estÔndar HTTP que significa "OK")
# Guardar el archivo ZIP localmente en formato binario
writeBin(content(respuesta_archivo, "raw"), nombre_archivo)
print("Archivo ZIP descargado correctamente.")
unzip(nombre_archivo, exdir = "carpeta_destino", overwrite = TRUE)
} else {
print(paste("Error al descargar el archivo. Código de respuesta:", status_code(respuesta_archivo)))
}
}
}
obtener_archivo("INPUT/DATA/Resistecia_Antibioticos_UE")
leer_archivo <- function(carpeta) {
carpeta_destino <- carpeta
archivos_zip <- list.files(carpeta_destino, pattern = "\\.zip$", full.names = TRUE)
# Iterar sobre los archivos .zip y descomprimirlos
for (archivo in archivos_zip) {
# Descomprimir el archivo .zip
archivos_extraidos <- unzip(archivo, exdir = carpeta_destino, overwrite = TRUE)
print(paste("Descomprimido:", archivo)) # Imprimir cada archivo que se descomprime
# Filtrar el archivo .xlsx entre los extraĆdos
archivo_xlsx <- archivos_extraidos[grepl("\\.xlsx$", archivos_extraidos)]#AquĆ, grepl() busca archivos cuyos nombres terminen con .xlsx
# Verificar si hay algĆŗn archivo .xlsx descomprimido
if (length(archivo_xlsx) > 0) {
# Leer el archivo Excel como dataframe
datos_xlsx <- read_excel(archivo_xlsx[1]) # Leer el primer archivo .xlsx encontrado
# Asignar el dataframe al Global Environment usando el nombre del archivo como variable
nombre_variable <- make.names(basename(archivo_xlsx[1])) # Crear un nombre de variable vƔlido
assign(nombre_variable, datos_xlsx, envir = .GlobalEnv) # Asignar el dataframe al Global Environment
}
}
}
leer_archivo("carpeta_destino")Juntar los dataframes que tenemos en el enviroment 1. Listar los nombres de todos los dataframes que terminan en ā.xlsxā (ajusta si es necesario) 2. Convertir los nombres a una lista de dataframes usando mget() 3. Unir todos los dataframes en uno solo usando bind_rows
nombres_dataframes <- ls(pattern = "_AMR_PUB\\.xlsx$")
lista_dataframes <- mget(nombres_dataframes)
df_combinado <- bind_rows(lista_dataframes, .id = "origen")Carga del global enviroment El entorno en el que guardan todos los dataframes de cada pais resultantes de la función leer_archivo, y el dataframe df_combinado del codigo anterior se ha cargado anteriormente ya que incluye otros datos que ya se han empleado.
Modificación y obtencion del dataframe con los datos seleccionamos las columnas que vamos a necesitar y filtramos en la columna de las bacterias solo las patogénicas.
Cambiamos los nombres de las columnas y lo asignamos al dataframe
paises_UE_df<-df_combinado%>%
select(rep_Country_name,rep_Country_code,zoonosis_name,matrix_name,totUnitsTested,totUnitsPositive,sampUnitType_name,sampType_name,MIC_name,CUTOFFVALUE)%>%
mutate(zoonosis_name = sub(".*", "", zoonosis_name))%>% # Extraer solo la primera palabra
filter(zoonosis_name != "Escherichia coli, non-pathogenic, unspecified")
nuevos_nombres <- c("NombrePais", "Codigo", "zoonosis_name","OrigenMuestra", "TotalMuestras","MuestraPositiva","Tipo_Unidad_Muestra","TipoMuestra","MIC_name","ValorCorte") # Modifica segĆŗn el nĆŗmero de columnas
colnames(paises_UE_df) <- nuevos_nombresMapa Interactivo de positivos en ganaderia por paises de la UE
library(sf)
library(ggplot2)
library(plotly)
library(dplyr)
library(viridis)
paises_UE <- c(
"Cyprus", "France", "Lithuania", "Czechia", "Germany",
"Estonia", "Latvia", "Sweden", "Finland", "Luxembourg",
"Belgium", "Spain", "Denmark", "Romania", "Hungary",
"Slovakia", "Poland", "Ireland", "Greece", "Austria",
"Italy", "Netherlands", "Croatia", "Slovenia", "Bulgaria",
"Portugal", "Malta"
)
mapa_mudo <- st_read("INPUT/DATA/mapaMundi") ## Reading layer `ne_10m_admin_0_countries' from data source
## `C:\Users\usuario\seminario_fuentes\INPUT\DATA\mapaMundi' using driver `ESRI Shapefile'
## Simple feature collection with 258 features and 168 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -180 ymin: -90 xmax: 180 ymax: 83.6341
## Geodetic CRS: WGS 84
mapa_mundo_europa <- mapa_mudo %>%
dplyr::filter(NAME %in% paises_UE)
mapa_mundo_europa <- mapa_mudo %>% dplyr::filter(NAME %in% paises_UE)
positivos_por_ciudad <- paises_UE_df %>%
dplyr::filter(NombrePais != "United Kingdom (Northern Ireland)")%>%
group_by(NombrePais) %>%
dplyr::summarize(total_pruebas = sum(TotalMuestras, na.rm = TRUE),
total_positivos= sum(MuestraPositiva, na.rm = TRUE)) %>%
mutate(ratio_positivo = (total_positivos / total_pruebas) * 100)
# Unir datos de positividad al mapa
mapa_mundo_europa$NAME <- as.character(mapa_mundo_europa$NAME)
positivos_por_ciudad$NombrePais <- as.character(positivos_por_ciudad$NombrePais)
# Realizar el join usando las columnas correctas
mapa_mundo_europa <- mapa_mundo_europa %>%
left_join(positivos_por_ciudad, by = c("NAME" = "NombrePais"))
mapa <- ggplot(mapa_mundo_europa) +
geom_sf(aes(fill = ratio_positivo)) +
scale_fill_viridis_c(option = "plasma", na.value = "gray") +
labs(title = "Tasa de Positividad por PaĆs en Europa",
fill = "Tasa de Positividad (%)") +
coord_sf(xlim = c(-30, 50), ylim = c(35, 72), expand = FALSE) + # Ajustar lĆmites para hacer zoom en Europa
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5))
# Convertir el grƔfico a interactivo con plotly
mapa_interactivo <- ggplotly(mapa)
mapa_interactivo